package cn.wizzer.app.crown.modules.services;

import cn.wizzer.app.crown.modules.models.CrownConfig;
import cn.wizzer.app.crown.modules.models.CrownMatch;
import cn.wizzer.app.crown.modules.models.enums.MatchStageEnum;
import cn.wizzer.app.crown.modules.models.enums.MatchTypeEnum;
import cn.wizzer.app.crown.modules.models.enums.PlayWayEnum;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;
import org.nutz.dao.pager.Pager;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface CrownMatchService extends BaseService<CrownMatch> {

    /**
     * 根据联赛名、主队名、客队名、比赛日期判断查询比赛
     *
     * @param league   联赛名
     * @param mbTeam   主队名
     * @param tgName   客队名
     * @param dateTime 比赛日期
     * @return CrownMatch
     */
    CrownMatch queryByTeamInfo(String league, String mbTeam, String tgName, Date dateTime);

    /**
     * 获取赛事及其玩法列表
     *
     * @param stage     赛事状态
     * @param sportType 赛事类型
     * @param keyWord   搜索关键字
     * @param pageNo    页码
     * @param pageSize  页面容量
     * @return Pagination
     */
    Pagination matchList(MatchStageEnum stage, String sportType, String keyWord, int pageNo, int pageSize);

    /**
     * 获取赛事及其玩法列表
     *
     * @param sportType 赛事类型
     * @param keyWord   搜索关键字
     * @param pageNo    页码
     * @param pageSize  页面容量
     * @return Pagination
     */
    Pagination p3MatchList(String sportType, String keyWord, int pageNo, int pageSize);


    /**
     * 获取冠军玩法列表
     *
     * @param sportType 赛事类型
     * @param keyWord   搜索关键字
     * @param pageNo    页码
     * @param pageSize  页面容量
     * @return Pagination
     */
    Pagination championList(String sportType, String keyWord, int pageNo, int pageSize);


    /**
     * 获取赛事玩法
     *
     * @param redisKey CrownRedisConstant中的常量 SIMPLEX#MID: 或 P3#MID:
     * @param match    比赛信息
     * @return CrownMatch
     */
    CrownMatch composeMatch(String redisKey, CrownMatch match);


    /**
     * 订阅赛事时爬取、推送所有玩法
     *
     * @param subscribeParam 订阅参数
     * @return
     */
    CrownMatch crawlerAllBets(Map<String, String> subscribeParam);



    /**
     * 赛果列表
     *
     * @param start     开始日期
     * @param end       结束日期
     * @param playWay   冠军赛果传FS 赛事赛果传R
     * @param pager     分页数据
     * @param sportType 赛事类型 FOOTBALL BASKETBALL
     * @return Pagination
     */
    Pagination results(String start, String end, PlayWayEnum playWay, Pager pager, String sportType);

    /**
     * 爬取赛果
     *
     * @param startTime 开始时间(毫秒级)
     * @param endTime   结束时间(毫秒级)
     */
    void crawlMatchResult(Long startTime, Long endTime);

    /**
     * 比赛数量统计
     *
     * @return List
     */
    List matchCount();


    /**
     * 获取赛果详情
     *
     * @param id         赛事id
     * @param oldVersion 赛果版本版本
     * @return CrownMatch
     */
    CrownMatch subResult(String id, Integer oldVersion);


    /**
     * 更新赛果
     *
     * @param match 赛事对象
     */
    void updateMatchResult(CrownMatch match, String platformUid);


}
